#ifndef _XLIST_H
#define _XLIST_H

struct node{
  void *value;
  struct node *next;
};

/*在栈中创建的xlist不需要使用析构函数，因为list使用xlist.value来组织数据不要node*/
struct xlist{
  int size;
  struct node *head;
  void *vle;
};

typedef int (*compare)(const void *ele,const void *val);

/*构造函数，此函数和析构函数配对使用，用来在堆中构建xlist*/
extern struct xlist*  xlist_build();
/*析构函数，此函数和构造函数配对使用，用来释放在堆中构建的xlist*/
extern int xlist_release(struct xlist *plist);

extern int xlist_add(struct xlist *lst,void *val);

extern int xlist_del(struct xlist *lst,const void *val,compare func);

extern int xlist_contain(struct xlist *lst,const void *val,compare func);
#endif
